import axios from 'axios';
import { message } from 'ant-design-vue';
import { useLoadingStore } from '../stores/loading'; // 引入loading store
import myPinia from '../stores/store';
// 导出apiClient实例，以便在其他模块中使用


const API_BASE_URL = import.meta.env.VITE_API_BASE_URL

// 创建axios实例并设置配置
const apiClient = axios.create({
    baseURL: API_BASE_URL,
    timeout: 10000, // 请求超时时间，单位为毫秒
});

//非vue的上下文（不是vue文件）使用之前创建的唯一的pinia的实例
const loadingStore = useLoadingStore(myPinia);
// 请求拦截器
apiClient.interceptors.request.use(
    config => {
        //开始展示加载动画
        //不想展示动画的，在api穿配置时，加一个hiddenLoading:ture
        if (!config.hiddenLoading) {
            loadingStore.startLoading();
          }
        // 从localStorage中获取token
        const token = localStorage.getItem('token');

        // 如果token存在，则将其添加到请求头中
        if (token) {
            config.headers['Authorization'] = "Bearer "+`${token}`;
        }
        return config;
    }
);


// 响应拦截器
apiClient.interceptors.response.use(
    response => {
        //关闭加载动画
        if (!response.config.hiddenLoading) {
            loadingStore.finishLoading()
          }
        const res=response.data;
      
        // code401表示用户未登录，可以重定向到登录页面
        if (res.code === 401) {
            window.location.href = '/login'; // 重定向到登录页面
        }
        if(res.message=="登录成功"&&res.data){
            localStorage.setItem('token', res.data);
        }
        // 后端响应中有 message 字段
        console.log(res.message);
        if (res.message!=null) {
            if(res.code==200){
                message.success(res.message);
            }
            else{
                message.error(res.message);  
            }
        }
        return response.data;
    }
);




// 定义一个函数，该函数接受一个配置对象，并使用 Axios 发送请求
export default function(config) {
    // 这里可以对 config 进行一些处理，比如添加认证 token 等
    // 但在这个简单的例子中，我们直接返回 Axios 实例的请求方法
    return apiClient(config);
}

